package src.dp.sequence;

public class no53 {//最大子序和

    /**
     * dp[i]含义：以num[i]为结尾的子数组和为dp[i]
     * 递推公式：dp[i]只有两个来源：
     *          1、要前面的子序和，则dp[i-1]+当前元素
     *          2、不要前面的子序和，就从当前元素重新开始累积
     * 初始化数组：dp[0] = nums[0]
     * 遍历顺序：数组从左往右
     */
    public int maxSubArray(int[] nums) {
        //if (nums.length == 1) return nums[0];

        int[] dp = new int[nums.length];
        int res = nums[0];
        dp[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
            res = Math.max(res, dp[i]);
        }
        return res;
    }
}
